
//给你一个字符串 s 和一个字符规律 p，请你来实现一个支持 '.' 和 '*' 的正则表达式匹配。
//
//    '.' 匹配任意单个字符
//    '*' 匹配零个或多个前面的那一个元素
//
//所谓匹配，是要涵盖 整个 字符串 s的，而不是部分字符串。

public class 正则表达式匹配 {
    public static void main(String[] args) {
        String s="aab";
        String p="c*a*b";
        boolean match = isMatch(s, p);
        System.out.println(match);
    }
    public static boolean isMatch(String s, String p) {
        if(p.length()==0)
            return s.length()==0;
        //如果第二个字符是*
        if (p.length()>1 && p.charAt(1)=='*') {
            // 如果*匹配0次，则p跳过两个字符
            //如果*号匹配一次或多次，则s从下一个字符开始匹配
            return isMatch(s,p.substring(2)) ||  (s.length()>0 && camp(s,p) && isMatch(s.substring(1),p));
        }
        else
            return (s.length()>0 && camp(s,p) && isMatch(s.substring(1),p.substring(1)));
    }
    //编写一个函数，判断p和s的第一个字符是否相等
    private static boolean camp(String s, String p) {
       return s.charAt(0)==p.charAt(0) || p.charAt(0)=='.';
    }
}
